import axios from 'axios'
import { config } from './config.js'
import qs from 'qs'
import { Loading, Message } from 'element-ui'
import _vue from '../main.js'

const instance = axios.create(config);

const loginInstance = axios.create(Object.assign({}, config, {baseURL: `${AOSAIBAN.HOST}/shichao/api/`}));

let lis = ''

// 请求拦截 分别在请求前加上loading动画，请求完成后关闭loading动画
instance.interceptors.request.use(function (config) {
  // Do something before request is sent
  lis = Loading.service({lock: true});
  return config;
}, function (error) {
  // Do something with request error
  return Promise.reject(error);
})
instance.interceptors.response.use(function (response) {
  // Do something with response data
  lis.close();
  return response;
}, function (error) {
  // Do something with response error
  lis.close();
  return Promise.reject(error);
});


// json格式传递数据
export const get = function(url, params) {
  const _qs = params ? qs.stringify(params, { arrayFormat: 'brackets' }) : null;
  let _url;
  if (_qs) {
    _url = `${url}?${_qs}`;
  } else {
    _url = url;
  }
  return new Promise((resolve, reject) => {
    instance.get(_url)
    .then(resp => {
      // 网络出错
      if (resp.status !== 200) {
        Message.error(`网络出错: status-code-${resp.status}`)
      } else {
        // 服务器内部信息
        if (resp.data.errcode != 0) {
          if (resp.data.errcode == -1001) {
            Message.error(`登陆已过期，请重新登陆`)
            _vue.$router.replace('/')
            window.localStorage.removeItem('userinfo')
          } else {
            Message.error(resp.data.errmsg)
          }
        } else {
          resolve(resp.data.data);
        }
      }
    })
    .catch((err) => {
      Message.error(`请求出错: ${JSON.stringify(err)}`)
    });
  });
};

export const del = function(url, id) {
  return new Promise((resolve, reject) => {
    instance.delete(`${url}/${id}`)
    .then(resp => {
      // 网络出错
      if (resp.status !== 200) {
        Message.error(`网络出错: status-code-${resp.status}`)
      } else {
        // 服务器内部信息
        if (resp.data.errcode != 0) {
          if (resp.data.errcode == -1001) {
            Message.error(`登陆已过期，请重新登陆`)
            _vue.$router.replace('/')
            window.localStorage.removeItem('userinfo')
          } else {
            Message.error(resp.data.errmsg)
          }
        } else {
          resolve(resp.data.data);
        }
      }
    })
    .catch((err) => {
      Message.error(`请求出错: ${JSON.stringify(err)}`)
    });
  });
};

export const put = function(url, id, params) {
  return new Promise((resolve, reject) => {
    instance.put(`${url}/${id}`, params)
    .then(resp => {
      // 网络出错
      if (resp.status !== 200) {
        Message.error(`网络出错: status-code-${resp.status}`)
      } else {
        // 服务器内部信息
        if (resp.data.errcode != 0) {
          if (resp.data.errcode == -1001) {
            Message.error(`登陆已过期，请重新登陆`)
            _vue.$router.replace('/')
            window.localStorage.removeItem('userinfo')
          } else {
            Message.error(resp.data.errmsg)
          }
        } else {
          resolve(resp.data.data);
        }
      }
    })
    .catch((err) => {
      Message.error(`请求出错: ${JSON.stringify(err)}`)
    });
  });
};

export const post = function(url, params) {
  return new Promise((resolve, reject) => {
    instance.post(url, params)
    .then(resp => {
      // 网络出错
      if (resp.status !== 200) {
        Message.error(`网络出错: status-code-${resp.status}`)
      } else {
        // 服务器内部信息
        if (resp.data.errcode != 0) {
          if (resp.data.errcode == -1001) {
            Message.error(`登陆已过期，请重新登陆`)
            _vue.$router.replace('/')
            window.localStorage.removeItem('userinfo')
          } else {
            Message.error(resp.data.errmsg)
          }
        } else {
          resolve(resp.data.data);
        }
      }
    })
    .catch((err) => {
      Message.error(`请求出错: ${JSON.stringify(err)}`)
    });
  });
};

export const login_post = function(url, params) {
  return new Promise((resolve, reject) => {
    loginInstance.post(url, params)
    .then(resp => {
      // 网络出错
      if (resp.status !== 200) {
        Message.error(`网络出错: status-code-${resp.status}`)
      } else {
        // 服务器内部信息
        if (resp.data.errcode != 0) {
          if (resp.data.errcode == -1001) {
            Message.error(`登陆已过期，请重新登陆`)
            _vue.$router.replace('/')
            window.localStorage.removeItem('userinfo')
          } else {
            Message.error(resp.data.errmsg)
          }
        } else {
          resolve(resp.data.data);
        }
      }
    })
    .catch((err) => {
      Message.error(`请求出错: ${JSON.stringify(err)}`)
    });
  });
};
